﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using UtilityExtensions;
using BOL.Ventas;
using BOL.UI;
using BOL.RendicionVentas;
using BOL;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using System.Data;
using UtilityExtensions;
using System.IO;
using BOL.Comun;

namespace UILGestion.VentaAdmin.RendicionVenta
{
    public partial class LiquidacionVentaGrid : System.Web.UI.UserControl
    {

        private string LIQUIDACIONVENTA= "LiquidacionVentaInfo";
        private string RENDICIONVENTAINFO = "RendicionVentaItemInfo";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!this.IsPostBack)
                {
                    //BindDataItem();
                    //setFooterRow();
                }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
        protected void CancelItem(object sender, GridViewCancelEditEventArgs e)
        {
            try
            {
                itemGridView.EditIndex = -1;
                itemGridView.FooterRow.Visible = true;
                BindDataItem();


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }


        protected void AddItem(object sender, EventArgs e)
        {
            try
            {


                DropDownList cuentaDDL =
                    ((DropDownList)itemGridView.FooterRow.FindControl("cuentaDDL"));

                TextBox fechaDepositoEditTXT =
                    ((TextBox)itemGridView.FooterRow.FindControl("fechaDepositoEditTXT"));

                TextBox numeroEditTXT =
                    ((TextBox)itemGridView.FooterRow.FindControl("numeroEditTXT"));

                TextBox totalTextBox =
                    ((TextBox)itemGridView.FooterRow.FindControl("totalDepositoTextBox"));

                



                TextBox idarchivoTXT =
                    ((TextBox)itemGridView.FooterRow.FindControl("idArchivoTXT"));


                
                TextBox retencionTXT =
                    ((TextBox)itemGridView.FooterRow.FindControl("totalRetencionTXT"));


                if (idarchivoTXT.Text.ToInt() ==0) { throw new Exception("Verifique CARGAR ARCHIVO antes de agregar el Deposito "); }

                DAL.CuentaBanco cuentaBanco = DbUtil.Db.CuentaBancos.SingleOrDefault(p => p.idInternal == cuentaDDL.SelectedValue.ToInt());
                if (cuentaBanco == null) { throw new Exception("Seleccione Cuenta Banco"); }
                if (fechaDepositoEditTXT.Text.ToDate().Value== null) { throw new Exception("Verifique  Fecha"); }
                
                LiquidacionVentaInfo item = new LiquidacionVentaInfo(internalID.Value.ToInt(), numeroEditTXT.Text,
                                                    cuentaBanco,
                                                    fechaDepositoEditTXT.Text.ToDate().Value,
                                                    totalTextBox.Text.ToDecimal().Value,
                                                    idarchivoTXT.Text.ToInt(),
                                                    
                                                    retencionTXT.Text.ToDecimal().Value);


                DataSet ds = (DataSet)Session[idColeccion.Value];

                ds.Tables[LIQUIDACIONVENTA].ImportRow(Util.EntidadToDataRow(item));

                BindDataItem();
                ((RendicionVentaEditForm)this.Page).SetEstadistica();
                setFooterRow();
                //GridUpdatePanel.Update();                     
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "").Replace("\r", "").Replace("\n", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        protected void UpdateItem(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                GridView gv = ((GridView)sender);
                
                DropDownList cuentaDDL =
                    ((DropDownList)gv.Rows[e.RowIndex].FindControl("cuentaDDL"));

                TextBox fechaDepositoEditTXT =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("fechaDepositoEditTXT"));

                TextBox numeroEditTXT =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("numeroEditTXT"));

                TextBox totalTextBox =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("totalTextBox"));

                TextBox idarchivoTXT =
                    ((TextBox)gv.Rows[e.RowIndex].FindControl("idArchivoTXT"));




                DataSet ds =
                (DataSet)Session[idColeccion.Value];

                int idinternal = int.Parse(gv.DataKeys[e.RowIndex].Values[0].ToString());

                var item = (from a in ds.Tables[LIQUIDACIONVENTA].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                            where a.Field<int>("idInternal") == idinternal
                            select a).First();
                DAL.CuentaBanco cuentaBanco = DbUtil.Db.CuentaBancos.SingleOrDefault(p => p.idInternal == cuentaDDL.SelectedValue.ToInt());

                if (cuentaBanco == null) { throw new Exception("Seleccione Cuenta Banco"); }


                 

           item["numero"]=numeroEditTXT.Text;
           item["fechaDeposito"]=fechaDepositoEditTXT.Text.ToDate().Value;
           item["simbol"]=cuentaBanco.Moneda.simbol;
           item["idArchivo"]=idarchivoTXT.Text.ToInt();
           item["total"]=totalTextBox.Text.ToDecimal().Value;
           item["idCuenta"]=cuentaBanco.idInternal;
           item["cuenta"]=
           item["totalStr"]=
           item["fechaDepositoStr"]=


                gv.EditIndex = -1;

                BindDataItem();
                itemGridView.FooterRow.Visible = false;

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        protected void EditItem(object sender, GridViewEditEventArgs e)
        {
            try
            {
                itemGridView.EditIndex = e.NewEditIndex;
                BindDataItem();
                itemGridView.FooterRow.Visible = false;
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        //protected void loadArchivo(object sender, EventArgs e)
        //{
        //    try
        //    {

        //        Button lnkdivrecurso = (Button)sender;
        //        string idOrdenVentaItem = lnkdivrecurso.CommandName.ToString();
        //        int rowindex = int.Parse(lnkdivrecurso.CommandArgument);
                

                
        //        FileUpload  archivoFileUpload = (FileUpload)itemGridView.Rows[rowindex].FindControl("archivoFileLoad");

                
        //        if (archivoFileUpload.HasFile)
        //        {

        //            // 1. Save logic

        //            //string directorio = AppDomain.CurrentDomain.RelativeSearchPath;

        //            TextBox archivoTXT = (TextBox)itemGridView.Rows[rowindex].FindControl("documentoTXT");
        //            TextBox idArchivoTXT = (TextBox)itemGridView.Rows[rowindex].FindControl("idArchivoTXT");
                    

        //            if (Session["idEmpresa"] == null) { throw new Exception("Debe volver a Login"); }

        //            string idProyecto= (string)Request.QueryString["idProyecto"];
        //            String ruta = Server.MapPath(ConfigurationManager.AppSettings["FileDeposito"].ToString());
        //            //ruta = String.Format("{0}{1}\\{2}\\{3}_{4}\\", ruta,
        //            //                                        Session["idEmpresa"],
        //            //                                        idProyecto.ToInt(),
        //            //                                        ordenVenta.numDocumento,
        //            //                                        ordenVenta.idInternal);

        //            if (!Directory.Exists(ruta))
        //                Directory.CreateDirectory(ruta);


        //            string nombre = Path.GetFileName(archivoFileUpload.FileName);
        //            string sFileName = ruta + nombre;

        //            archivoFileUpload.SaveAs(sFileName);

        //            int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());

        //            Archivo archivo = new Archivo();
        //            archivo.AddSet(DbUtil.Db, ruta, nombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
        //            DbUtil.Db.SubmitChanges();

        //            archivoTXT.Text = archivo.descripcion;
        //            idArchivoTXT.Text = archivo.idInternal.ToString();

        //        }


        //    }
        //    catch (SqlException sqlex)
        //    {
        //        WebServerSideSqlError.Log(sqlex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


        //    }
        //    catch (Exception ex)
        //    {
        //        WebServerSideError.Log(ex);
        //        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
        //         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

        //    }

        //}
        protected void loadArchivoInsert(object sender, EventArgs e)
        {
            try
            {

                Button lnkdivrecurso = (Button)sender;

                DropDownList cuentaDDL =
                   ((DropDownList)itemGridView.FooterRow.FindControl("cuentaDDL"));


                FileUpload archivoFileUpload = (FileUpload)itemGridView.FooterRow.FindControl("archivoFileLoad");


                if (archivoFileUpload.HasFile)
                {

                    // 1. Save logic

                    //string directorio = AppDomain.CurrentDomain.RelativeSearchPath;

                   
                    TextBox idArchivoTXT = (TextBox)itemGridView.FooterRow.FindControl("idArchivoTXT");
                    Image Archivoimg = (Image)itemGridView.FooterRow.FindControl("Archivoimg");

                    ArchivoBL archivoBol = new ArchivoBL();

                    var archivo = archivoBol.AddProyectoDeposito(archivoFileUpload, idProyecto.Value.ToInt());
                    
                    idArchivoTXT.Text = archivo.idInternal.ToString();
                    Archivoimg.ImageUrl = "~/Images/completo.png";

                }


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        public void Load(int idColeccion, int idParent,int idProyecto,int idMoneda)
        {
            this.idColeccion.Value = idColeccion.ToString();
            this.internalID.Value = idParent.ToString();
            this.idProyecto.Value = idProyecto.ToString();
            this.idMoneda.Value = idMoneda.ToString();
            BindDataItem();
            setFooterRow();

        }

        public override void DataBind()
        {
            itemGridView.DataBind();
        }
        public object DataSource
        {
            set { itemGridView.DataSource = value; }
        }

        protected void DeleteItem(object sender, EventArgs e)
        {
            try
            {

                ImageButton lnkRemove = (ImageButton)sender;
                int idInternal = int.Parse(lnkRemove.CommandArgument.ToString());

                DataSet ds = (DataSet)Session[idColeccion.Value];

                var drw = (from a in ds.Tables[LIQUIDACIONVENTA].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                           where a.Field<int>("idInternal") == idInternal
                           select a).First();

                drw.Delete();
                //eRolList.Tables[1].Rows.Remove(drw);

                Session[idColeccion.Value.ToString()] = ds;

                BindDataItem();
                ((RendicionVentaEditForm)this.Page).SetEstadistica();

                setFooterRow();


            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "").Replace("\r", "").Replace("\n", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        private void resetEmpty()
        {
            if (itemGridView.Rows.Count == 0)
            {
                List<LiquidacionVentaInfo> itemList0 = new List<LiquidacionVentaInfo>();
                LiquidacionVentaInfo itemcero = new LiquidacionVentaInfo();
                                     itemcero.numero="";
                                    itemcero.idArchivo=0;

                itemList0.Add(itemcero);
                itemGridView.DataSource = itemList0;
                itemGridView.DataBind();
                itemGridView.Rows[0].Visible = false;
            }

        }

        public void ValidaFooter(DataSet ds)
        {
            var drw = (from a in ds.Tables[LIQUIDACIONVENTA].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                       select a).Sum(p => p.Field<decimal>("total"));
            var item = (from a in ds.Tables[RENDICIONVENTAINFO].AsEnumerable().Where(p => p.RowState != DataRowState.Deleted)
                        select a).Sum(p => p.Field<decimal>("total"));

            itemGridView.ShowFooter = true;
            
            if (item <= drw)
            {
                itemGridView.ShowFooter = false;
            }
        }

        public void BindDataItem()
        {

            DataSet ds = (DataSet)Session[idColeccion.Value];
            ValidaFooter(ds);     

            itemGridView.DataSource = ds.Tables[LIQUIDACIONVENTA];
            itemGridView.DataBind();
            resetEmpty();
           
        }


        private void setFooterRow()
        {




            DropDownList cuentaDDL = ((DropDownList)itemGridView.FooterRow.FindControl("cuentaDDL"));
            
            

            BOL.ListValueBL lista = new ListValueBL();

            cuentaDDL.DataValueField = "idInternal";
            cuentaDDL.DataTextField = "descripcion";
            cuentaDDL.DataSource = lista.GetCuentaRecaudadora(idProyecto.Value.ToInt(), idMoneda.Value.ToInt());
            cuentaDDL.DataBind();



            

        }

        public void HideFooter()
        {
            itemGridView.ShowFooter = false;
            itemGridView.DataBind();
        }
        public void HideEdit()
        {
            //ultimas  columnas
            var councolumans = itemGridView.Columns.Count;
            itemGridView.Columns[councolumans-1].Visible = false;
            //itemGridView.Columns[councolumans-2].Visible = false;
            itemGridView.DataBind();
        }

        public void HideTotal()
        {
            //ultimas  columnas
            var councolumans = itemGridView.Columns.Count;
            itemGridView.Columns[councolumans-2].Visible = false;
            itemGridView.DataBind();
        }

        public void HideRetencion()
        {
            //ultimas  columnas
            var councolumans = itemGridView.Columns.Count;
            itemGridView.Columns[councolumans - 3].Visible = false;
            itemGridView.DataBind();
        }
    }
}